<?php
namespace wxpay;

require_once 'lib/WxPay.Api.php';
require_once 'lib/WxPay.JsApiPay.php';
/**
 * js 小程序支付
 * Class JsapiPay
 * @package wxpay
 */
class JsapiPay extends WxpayBase
{
    /**
     * 获取预支付信息
     *
     * @param array  $params 订单信息
     * @param string $params['body'] 商品简单描述
     * @param string $params['out_trade_no'] 商户订单号, 要保证唯一性
     * @param string $params['total_fee'] 标价金额, 请注意, 单位为分!!!!!
     *
     * @param string $openId 用户身份标识
     *
     * @return array 预支付信息
     */
    public static function getParams($params, $openId='')
    {
        // 1.校检参数
        $that = new self();
        $that->checkParams($params);
        // 2.组装参数

        $input = $that->getPostData($params, $openId);
        // 3.获取预支付信息
        $order = \WxPayApi::unifiedOrder($input);

        // 4.进行结果检验
        $that->checkResult($order);
        // 5.组装支付参数
        $tools = new \JsApiPay();
        $jsApiParameters = $tools->GetJsApiParameters($order);
        // 6.返回支付参数
        return $jsApiParameters;
    }


    // 组装请求参数
    private function getPostData($params, $openId)
    {
        $input  = new \WxPayUnifiedOrder();
        $input->SetOpenid($openId);
        $input->SetTrade_type("JSAPI");
        $input->SetBody($params['body']);
        $input->SetTotal_fee($params['total_fee']);
        $input->SetNotify_url($params['notify_url']);
        $input->SetOut_trade_no($params['out_trade_no']);
        if(!empty($params['attach']))
        {
            $input->SetAttach(json_encode($params['attach']));
        }

        return $input;

    }
}